草庐IT

Java HotSpot 枚举开销

全部标签

objective-c - 枚举 Objective-C 和 Swift 之间的互操作性

我正在将项目的一部分移植到Swift上,发现枚举不可互操作。此外,任何使用枚举的属性和函数都不会暴露给objective-c,因为枚举在objective-c中不具有等效性。即使枚举是NSInteger类型,枚举仍然不会暴露。如何解决这个互操作性问题,使swift类尽可能干净? 最佳答案 Swift2:在Swift2中,您现在可以将枚举公开给Objective-C。使枚举成为非泛型,从简单的数字类型(如Int)继承,并且不使用关联值。然后它会出现在Objective-C中,枚举的名称预先附加到案例中,因此它看起来像一个Objecti

swift - 嵌套枚举以允许多个时间范围

我希望实现某种风格的枚举语法/功能,但我不确定如何实现它。目前我有以下内容:internalenumTimeframe:Equatable{//MARK:-Casescasehour(count:Int)caseday(count:Int)caseweek(count:Int)casemonth(count:Int)caseyear(count:Int)caseallcaseexact(date:Date)caseunspecified}除非需要,否则我想消除计数关联值。例如:letoneDayTimeframe:Timeframe=.daylettwoDayTimeframe:Tim

swift - 具有相同案例名称且具有不同类型关联值的枚举

编译以下Swift代码:enumGraphDataSource{casearray(data:[Double],start:Double?,step:Double?)casepairs(XYValues:[Double:Double])casepairs(dateValues:[Date:Double])casefunction((Double)->Double?)funclocalizedName()->String{//TODO:CreatelocalizablestringsreturnNSLocalizedString(Mirror(reflecting:self).child

Swift:使用符合相同协议(protocol)的嵌套枚举案例的代码更少

我尝试在以下场景中编写更少的代码:我有这个Queryable协议(protocol)和一个Parameter枚举:protocolQueryable{varurlQuery:URLQueryItem{get}}enumPaginationParameter:Queryable{casepage(Int)casepageSize(Int)varqueryItem:URLQueryItem{switchself{case.page(letpage):returnURLQueryItem(name:"page",value:page.description)case.pageSize(let

swift - 如何在 Swift 的字符串中快速枚举字符串?

这个问题在这里已经有了答案:SplitaStringintoanarrayinSwift?(40个答案)关闭5年前。例如我有通常的快速枚举for(varmyChar:Character)in"HelloWorld!"{//code}这很好用,我可以用这个字符串的每个字符做任何我想做的事。但是如果我想使用字符串而不是字符怎么办,就像这样for(varmyStr:String)in"HelloWorld!"//thisiserror{switchmyStr{case"Hello"://codecase"World!"://codedefault:break}}这个可以实现吗?谢谢

swift - 嵌套枚举作为字典键

为什么这不起作用?注意:如果没有嵌套,枚举作为字典键是有效的。structOuterStruct{enumInnerEnum{casenonecaseacaseb}}vardict:[OuterStruct.InnerEnum:String]=[OuterStruct.InnerEnum:String]() 最佳答案 您可以通过使用传统方式实例化字典来解决这个问题:vardict:[OuterStruct.InnerEnum:String]=Dictionary()请注意,您可以使用类型推断并避免指定变量类型:vardict=Dic

swift - 枚举变量的模式翻转

在Enum状态之间切换的最佳方式是什么?enumEVEN_ODD{caseEven,Odd}var__mode_bit=EVEN_ODD.Even;for_in1...5{__mode_bit=(__mode_bit==.Even)?.Odd:.Even}能否简化__mode_bit?:? 最佳答案 看看关于bool值的Apple文档,他们给出了bool类型枚举的示例:https://developer.apple.com/swift/blog/?id=8由于您可以从原始创建一个枚举,您可以通过以下方式切换值:lettrue=MyB

swift - 对于 swift 中的错误,我应该使用枚举还是类层次结构?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion在Swift2中,任何符合ErrorType协议(protocol)的类型都可以被抛出和捕获。对我来说,拥有一个通用的错误层次结构并在多个地方重复使用它是有意义的。但是,Apple文档似乎促使开发人员使用枚举来处理错误。例如,这个层次结构可以让我在不知道它的确切子类型的情况下捕获并处理一个常见的ValidationError。这也将允许应用程序的不同部分扩展ValidationError。

ios - 枚举内存使用

我想知道下面哪个占用内存多structConstants{varage=10}或enumConstants{caseage=10}我还想知道enum和#define在内存存储方面的区别。谁能帮帮我? 最佳答案 长见识您的结构将占用Int的大小,因此在最近的Mac平台上为64位(8字节)。您的枚举通常会占用UInt8的大小,即8位(1字节),但在单例枚举的这种特殊情况下,大小为0位。为了理解这一点,这里有一些细节枚举在内部存储一个整数值以匹配案例。例如这个枚举:enumDirection{caseeast,west,south,nor

Swift 枚举不等式

我习惯了能够治疗enums作为数值,因此使用像>这样的运算符,等。对于大多数枚举用途,这可能不是那么必要,但有一种情况是这样的:@objcpublicenumMyState:Int{caseLoading=0caseLoadedcaseResolvedcaseProcessed}我希望能够获取一个实例变量并检查它:varstate:MyState=...ifstate>.Loaded{...}但是Swift提示它不知道该做什么。我已将枚举声明为Int。是我比较rawValue的唯一选择秒?我希望避免这种情况,因为它会变得非常丑陋,而且Swiftsooo会自行关闭。